package com.wx.datastructure.linked;

/**
 * @author wx
 * @Description: 链表接口
 * @date 2018/12/13 001318:25
 */
public interface ILinked<E> {
    /**
     * @description: 获取元素容量
     * @author: wx
     * @date: 2018/12/13 0013
     * @param 
     * @return: int
     */
    int getSize();
    /**
     * @description: 容器是否为空
     * @author: wx
     * @date: 2018/12/13 0013
     * @param
     * @return: boolean
     */
    boolean isEmpty();
    /**
     * @description: 链表头添加元素
     * @author: wx
     * @date: 2018/12/13 0013
     * @param e
     * @return: void
     */
    void addFirst(E e);
    /**
     * @description: 链表尾添加元素
     * @author: wx
     * @date: 2018/12/13 0013
     * @param e
     * @return: void
     */
    void addLast(E e);
    
    /**
     * @description: 指定位置添加元素
     * @author: wx
     * @date: 2018/12/15 0015
     * @param index 下标
     * @param e
     * @return: void
     */
    void add(int index, E e);
    /**
     * @description: 获取第一个
     * @author: wx
     * @date: 2018/12/13 0013
     * @param
     * @return: E
     */
    E getFirst();
    /**
     * @description: 获取最后一个元素
     * @author: wx
     * @date: 2018/12/13 0013
     * @param
     * @return: E
     */
    E getLast();
    /**
     * @description: 根据下标获取元素
     * @author: wx
     * @date: 2018/12/13 0013
     * @param index
     * @return: E
     */
    E get(int index);
    /**
     * @description: 删除第一个元素
     * @author: wx
     * @date: 2018/12/13 0013
     * @param
     * @return: E
     */
    E removeFirst();
    /**
     * @description: 删除最后一个元素
     * @author: wx
     * @date: 2018/12/13 0013
     * @param
     * @return: E
     */
    E removeLast();
    /**
     * @description: 删除指定元素
     * @author: wx
     * @date: 2018/12/13 0013
     * @param e
     * @return: void
     */
    void removeElement(E e);

    /**
     * @description: 指定下标修改元素
     * @author: wx
     * @date: 2018/12/15 0015
     * @param index 下标
     * @param e     元素
     * @return: void
     */
    void set(int index, E e);
    
    /**
     * @description: 元素内容是否存在
     * @author: wx
     * @date: 2018/12/15 0015
     * @param e
     * @return: boolean
     */
    boolean contains(E e);
}
